// 当 node 清空事件循环，并且没有其他安排时触发这个事件。通常来说，当没有进程安排时 node 退出，
// 但是 'beforeExit' 的监听器可以异步调用，这样 node 就会继续执行。
process.on('beforeExit', function(code) {
  console.log('beforeExit');
});

// 当一个异常冒泡回到事件循环，触发这个事件。如果给异常添加了监视器，默认的操作（打印堆栈跟踪信息并退出）就不会发生。
process.on('uncaughtException', function(code) {
  console.log('uncaughtException');
});

// 当进程接收到信号时就触发。信号列表详见标准的 POSIX 信号名，如 SIGINT、SIGUSR1 等。
process.on('SIGINT', function(code) {
  console.log('Signal');
});

// 当进程准备退出时触发。
process.on('exit', function(code) {
  console.log('exit');
  // 以下代码永远不会执行
  setTimeout(function() {
    console.log('该代码不会执行');
  }, 0);

  console.log('退出码为:', code);
});
console.log('程序执行结束');